# [Java] ๊ณ ์ ๋ฝ (Intrinsic Lock)
# Intrinsic Lock / Synchronized Block / Reentrancy
Intrinsic Lock (= monitor lock = monitor) : Java์ ๋ชจ๋ ๊ฐ์ฒด๋ lock์ ๊ฐ๊ณ ์์.
Synchronized ๋ธ๋ก์ Intrinsic Lock์ ์ด์ฉํด์, Thread์ ์ ๊ทผ์ ์ ์ดํจ.
public class Counter {
private int count;
public int increase() {
return ++count; // Thread-safe ํ์ง ์์ ์ฐ์ฐ
}
}
# Q) ++count ๋ฌธ์ด atomic ์ฐ์ฐ์ธ๊ฐ?
A) read (count ๊ฐ์ ์ฝ์) -> modify (count ๊ฐ ์์ ) -> write (count ๊ฐ ์ ์ฅ)์ ๊ณผ์ ์์, ์ฌ๋ฌ Thread๊ฐ ๊ณต์ ์์(count)์ผ๋ก ์ ๊ทผํ ์ ์์ผ๋ฏ๋ก, ๋์์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํจ.
# Synchronized ๋ธ๋ก์ ์ฌ์ฉํ Thread-safe Case
public class Counter{
private Object lock = new Object(); // ๋ชจ๋ ๊ฐ์ฒด๊ฐ ๊ฐ๋ฅ (Lock์ด ์์)
private int count;
public int increase() {
// ๋จ๊ณ (1)
synchronized(lock){ // lock์ ์ด์ฉํ์ฌ, count ๋ณ์์์ ์ ๊ทผ์ ๋ง์
return ++count;
}
/*
๋จ๊ณ (2)
synchronized(this) { // this๋ ๊ฐ์ฒด์ด๋ฏ๋ก lock์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅ
return ++count;
}
*/
}
/*
๋จ๊ณ (3)
public synchronized int increase() {
return ++count;
}
*/
}
๋จ๊ณ 3๊ณผ ๊ฐ์ด lock ์์ฑ ์์ด synchronized ๋ธ๋ก ๊ตฌํ ๊ฐ๋ฅ
# Reentrancy
์ฌ์ง์ : Lock์ ํ๋ํ Thread๊ฐ ๊ฐ์ Lock์ ์ป๊ธฐ ์ํด ๋๊ธฐํ ํ์๊ฐ ์๋ ๊ฒ
(Lock์ ํ๋์ด 'ํธ์ถ ๋จ์'๊ฐ ์๋ Thread ๋จ์๋ก ์ผ์ด๋๋ ๊ฒ)
public class Reentrancy {
// b๊ฐ Synchronized๋ก ์ ์ธ๋์ด ์๋๋ผ๋, a ์ง์
์ lock์ ํ๋ํ์์.
// b๋ฅผ ํธ์ถํ ์ ์๊ฒ ๋จ.
public synchronized void a() {
System.out.println("a");
b();
}
public synchronized void b() {
System.out.println("b");
}
public static void main (String[] args) {
new Reentrancy().a();
}
}
# Structured Lock vs Reentrant Lock
Structured Lock (๊ตฌ์กฐ์ Lock) : ๊ณ ์ lock์ ์ด์ฉํ ๋๊ธฐํ
(Synchronized ๋ธ๋ก ๋จ์๋ก lock์ ํ๋ / ํด์ ๊ฐ ์ผ์ด๋๋ฏ๋ก)
๋ฐ๋ผ์,
Aํ๋ -> Bํ๋ -> Bํด์ -> Aํด์ ๋ ๊ฐ๋ฅํ์ง๋ง,
Aํ๋ -> Bํ๋ -> Aํด์ -> Bํด์ ๋ ๋ถ๊ฐ๋ฅํจ.
์ด๊ฒ์ ๊ฐ๋ฅํ๊ฒ ํ๊ธฐ ์ํด์๋ Reentrant Lock (๋ช ์์ Lock) ์ ์ฌ์ฉํด์ผ ํจ.
# Visibility
๊ฐ์์ฑ : ์ฌ๋ฌ Thread๊ฐ ๋์์ ์๋ํ์์ ๋, ํ Thread๊ฐ ์ด ๊ฐ์ ๋ค๋ฅธ Thread๊ฐ ๋ณผ ์ ์๋์ง, ์๋์ง ์ฌ๋ถ
๋ฌธ์ : ํ๋์ Thread๊ฐ ์ด ๊ฐ์ ๋ค๋ฅธ Thread๊ฐ ๋ณผ ์ ์๋๋ ์๋๋. (๋ณผ ์ ์์ผ๋ฉด ๋ฌธ์ ๊ฐ ๋จ)
Lock : Structure Lock๊ณผ Reentrant Lock์ Visibility๋ฅผ ๋ณด์ฅ.
์์ธ :
- ์ต์ ํ๋ฅผ ์ํด Compiler๋ CPU์์ ๋ฐ์ํ๋ ์ฝ๋ ์ฌ๋ฐฐ์ด๋ก ์ธํด์.
- CPU core์ cache ๊ฐ์ด Memory์ ์ ๋ ์ฐ์ด์ง ์์ ๋ฐ์ํ๋ ๋ฌธ์ .